package org.despair2D.ui.core 
{
	import flash.display.DisplayObject;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	import org.despair2D.renderer.IView;
	
	
	[Event(name = "press", type = "org.despair2D.ui.events.ManipulateEvent")] 
	
	[Event(name = "release", type = "org.despair2D.ui.events.ManipulateEvent")] 
	
	[Event(name = "over", type = "org.despair2D.ui.events.ManipulateEvent")] 
	
	[Event(name = "leave", type = "org.despair2D.ui.events.ManipulateEvent")] 
	
	[Event(name = "move", type = "org.despair2D.ui.events.ManipulateEvent")] 
	
	[Event(name = "click", type = "org.despair2D.ui.events.ManipulateEvent")] 
	
	[Event(name = "doubleClick", type = "org.despair2D.ui.events.ManipulateEvent")] 
	
	[Event(name = "startDrag", type = "org.despair2D.ui.events.ManipulateEvent")] 
	
	[Event(name = "stopDrag", type = "org.despair2D.ui.events.ManipulateEvent")] 
	
	[Event(name = "killed", type = "org.despair2D.ui.events.ManipulateEvent")] 
	
	[Event(name = "interactiveChange", type = "org.despair2D.ui.events.InteractiveEvent")] 
	
	[Event(name = "visibleChange", type = "org.despair2D.ui.events.VisibleEvent")] 
	
	
public interface IComponent extends IView
{
	
	function get displayObject() : DisplayObject
	
	function get globalPos() : Point
	
	function get layer() : int
	
	function get hovered() : Boolean
	
	function get pressed() : Boolean
	
	function get dragging() : Boolean
	
	function get draggingInBounds() : Boolean
	
	function get userData() : Object
	function set userData( v:Object ) : void
	
	
	function moveInStage( gx:Number, gy:Number ) : void
	
	function startDrag( lockCenter:Boolean = false, bounds:Rectangle = null ) : void
	
	function kill() : void
	
}
	
}